#include "comment.hpp"

int main()
{
    key_t k = GetKey();
    printf("key : 0x%x\n",k);

    int shmid = create_shm(k);
    printf("shmid : %d\n",shmid);//第一次成功之后，后面都会报文件已存在的错误

    sleep(5);

    //挂接成功
    char* start = (char*)attchshm(shmid);
    printf("attch start : %p\n",start);
    
    //进行通信
    //sleep(5);
    while(true)
    {
        //以前拿数据的方法：定义一个buffer，通过read一个个读取出来
        printf("client say : %s",start);

        //获取共享内存的内核结构！！
        struct shmid_ds ds;
        shmctl(shmid,IPC_STAT,&ds);
        printf("获取属性: size: %d, pid: %d, myself: %d, key: 0x%x",\
                ds.shm_segsz, ds.shm_cpid, getpid(), ds.shm_perm.__key);

        sleep(1);
    }

    /这里直接删除共享内存太粗暴了，我们进行去关联操作即可，剩下的操作交给os就行

    //去关联
    detachshm(start);
    sleep(10);//一定要让server最后推出，所以休眠时间长一点

    //先去关联，10s后，删除共享内存

    //删除共享内存
    delshm(shmid);//谁创建共享内存，谁就来删除
    return 0;
}

